package com.heima.datastructure.deque;


/**
 * <h3>双端队列的接口</h3>
 * @author 勾新杰
 * @version 1.0
 * @date 2024/9/1 21:04
 */
public interface Deque<E> { // double ended queue

    /**
     * 左端入队
     * @param value 待入队的值
     * @return 是否入队成功
     */
    boolean offerFirst(E value);

    /**
     * 右端入队
     * @param value 待入队的值
     * @return 是否入队成功
     */
    boolean offerLast(E value);

    /**
     * 左端出队
     * @return 出队的元素的值
     */
    E pollFirst();

    /**
     * 右端出队
     * @return 出队的元素的值
     */
    E pollLast();

    /**
     * 获取左端队头的值
     * @return 左端队头的值
     */
    E peekFirst();

    /**
     * 获取右端队头的值
     * @return 右端队头的值
     */
    E peekLast();

    /**
     * 判断是否为空
     * @return 为空返回true
     */
    boolean isEmpty();

    /**
     * 判断是否为满
     * @return 为满返回true
     */
    boolean isFull();

    /**
     * 返回双端队列的大小
     * @return 双端队列的大小
     */
    int size();
}
